<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>
    <style>
        .box {
            width: 500px;
            height: 500px;
            background-color: #cccccc;
        }

        .rect {
            width: 50px;
            height: 50px;
            background-color: red;
            position: absolute;
        }
    </style>
</head>

<body>
    <div id="app">
        <!-- 
            因为vue对于页面模板需要进行特殊转换处理，所以导致页面定义的关键字 形参 this 指向了全局环境
            所有在vue环境下，无法在页面中通过this指向DOM对象
        -->
        <input type="button" value="在页面传入this" @click="printTemplateThis(this)"><br><br>
        <!-- 
            因为vue的页面语法解析问题，在定义事件回调形参时，如果传入了变量名称，此时该变量指向于vue实例的数据仓库
            所以导致 js 事件源特殊关键字 event 被占用；
            如果需要获取事件源对象 传入的关键字 变更为 $event    
        -->
        <div class="box" @mousemove="moveRect(msg,$event)"></div>
        <div class="rect" v-bind:style=" `top:${y}px;left:${x}px` "></div>
        <hr>
        <p>msg:{{ msg }}</p>
        <input type="text" @input=" msg = $event.target.value ">
    </div>
</body>
<script>
    new Vue({
        el: "#app",
        data:{
            msg:"测试msg",
            x:0,
            y:0
        },
        methods: {
            printTemplateThis(arg) {
                console.log(arg);
            },
            moveRect(msg,e) {
                console.log(msg,e);
                this.x = e.x+10;
                this.y = e.y+10;
            }
        }

    })
</script>

</html>